#!/bin/bash

# 独立启动代理服务器（用于MCP客户端连接）
# 此脚本会自动确保HTTP服务器先启动

set -e

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# PID文件
HTTP_PID_FILE="$SCRIPT_DIR/.http-server.pid"

echo -e "${BLUE}🔧 MCP Proxy Launcher${NC}"
echo -e "${BLUE}=====================${NC}"

# 检查依赖
if [ ! -d "dist" ]; then
    echo -e "${YELLOW}📦 编译代码...${NC}"
    npm run build
fi

# 函数：检查HTTP服务器状态
check_http_server() {
    if [ -f "$HTTP_PID_FILE" ]; then
        PID=$(cat "$HTTP_PID_FILE")
        if ps -p $PID > /dev/null 2>&1; then
            # 进程存在，检查健康状态
            if curl -s http://localhost:3000/health > /dev/null 2>&1; then
                return 0  # 服务器运行正常
            else
                return 2  # 进程存在但不健康
            fi
        else
            # 进程不存在
            rm -f "$HTTP_PID_FILE"
            return 1
        fi
    else
        # 没有PID文件
        return 1
    fi
}

# 函数：启动HTTP服务器
start_http_server() {
    echo -e "${YELLOW}🚀 启动HTTP服务器...${NC}"
    
    # 启动HTTP服务器（后台）
    nohup node --max-old-space-size=4096 dist/mcp-http-server.js > logs/http-server.log 2>&1 &
    HTTP_PID=$!
    echo $HTTP_PID > "$HTTP_PID_FILE"
    
    # 等待服务器启动
    echo -e "${YELLOW}⏳ 等待HTTP服务器启动...${NC}"
    for i in {1..30}; do
        if curl -s http://localhost:3000/health > /dev/null 2>&1; then
            echo -e "${GREEN}✅ HTTP服务器已启动 (PID: $HTTP_PID)${NC}"
            return 0
        fi
        sleep 1
        echo -n "."
    done
    
    echo -e "\n${RED}❌ HTTP服务器启动超时${NC}"
    return 1
}

# 创建日志目录
mkdir -p logs

# 检查并启动HTTP服务器
echo -e "${BLUE}📊 检查HTTP服务器状态...${NC}"
check_http_server
STATUS=$?

if [ $STATUS -eq 0 ]; then
    echo -e "${GREEN}✅ HTTP服务器已在运行${NC}"
elif [ $STATUS -eq 2 ]; then
    echo -e "${YELLOW}⚠️  HTTP服务器进程存在但不健康，重启中...${NC}"
    PID=$(cat "$HTTP_PID_FILE")
    kill $PID 2>/dev/null || true
    rm -f "$HTTP_PID_FILE"
    sleep 2
    if ! start_http_server; then
        echo -e "${RED}❌ 无法启动HTTP服务器${NC}"
        exit 1
    fi
else
    echo -e "${YELLOW}ℹ️  HTTP服务器未运行，正在启动...${NC}"
    if ! start_http_server; then
        echo -e "${RED}❌ 无法启动HTTP服务器${NC}"
        exit 1
    fi
fi

# 启动代理服务器（前台运行，用于MCP客户端）
echo -e "${GREEN}✅ HTTP服务器就绪${NC}"
echo -e "${BLUE}🚀 启动MCP代理服务器...${NC}"
echo -e "${BLUE}================================${NC}"
echo -e "${GREEN}代理配置:${NC}"
echo -e "  协议: stdio (MCP标准)"
echo -e "  目标: http://localhost:3000"
echo -e "${BLUE}================================${NC}"
echo ""

# 前台运行代理，这样MCP客户端可以通过stdio连接
exec node --max-old-space-size=4096 dist/mcp-proxy.js